/*
 * Copyright (c) 2017. 上海业晋信息技术有限公司 www.yejinsoft.com
 */

// 获取url的参数，回路的编码 {'code':回路编码}
function getRequest() {
    var url = location.search; //获取url中"?"符后的字串
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for(var i = 0; i < strs.length; i ++) {
            theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
        }
    }
    return theRequest;
}
var params = getRequest(); // 回路的编码 {'code':回路编码}

//config的设置是全局的
layui.config({
    base: '/js/plugins/' // 自定义扩展插件所在的目录
}).extend({ //设定模块别名
    yjsloading: 'yjsloading',
    yjslayer: 'yjslayer',
    yjsupload: 'yjsupload',
});

layui.use(['form','yjslayer', 'yjsloading', 'table', 'layedit'], function () {
    var $ = layui.jquery
        , form = layui.form
        , yjslayer = layui.yjslayer
        , yjsloading = layui.yjsloading
        , layedit = layui.layedit
        , table = layui.table;
    // 设置全局参数
    layedit.set({
        tool: ['strong', 'italic', 'underline', 'del', '|', 'left', 'center', 'right', '|', 'link', 'unlink', '|', 'face', 'image'],
    });

    // 自定义表单验证规则
    form.verify({

    });

    // 获取csrf-token
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    // echarts动态加载数据
    function myChart() {
        var myChart = echarts.init(document.getElementById('circuitChart'));  // 直接开始初始化，还是要用原生javascript
        option = {
            title: {
                text: ''
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data:['电压','电流','温度']
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: []
            },
            yAxis: {
                axisLabel : {
                    formatter: function(){
                        return "";
                    }
                }
            },
            series: [
                {
                    name:'电压',
                    type:'line',
                    stack: '总量',
                    data: []
                },
                {
                    name:'电流',
                    type:'line',
                    stack: '总量',
                    data: []
                },
                {
                    name:'温度',
                    type:'line',
                    stack: '总量',
                    data: []
                }
            ]
        };
        myChart.setOption(option); // 加载图表
        myChart.showLoading();    //数据加载完之前先显示一段简单的loading动画

        // 动态加载折线图的数据
        $.ajax({
            url: '/circuit/day/data?code=' + params['code'],
            type: 'post',
            async : true,
            data : {},
            dataType : "json",        //返回数据形式为json
        })
            .done(function (data) {
                console.log('ss',data);
                console.log('done，折线图数据获取成功');
                myChart.hideLoading();    //隐藏加载动画
                myChart.setOption({
                    xAxis: {
                        data: data.data.categories
                    },
                    series: [{
                        // 根据名字对应到相应的系列
                        name:'电压',
                        data: data.data.voltages
                    },{
                        name:'电流',
                        data: data.data.electrics
                    },{
                        name:'温度',
                        data: data.data.temperatures
                    }]
                });
            })
            .fail(function () {
                alert("图表请求数据失败!");
                myChart.hideLoading();
            })
            .always(function () {
                console.log('1111');
            });
    }
    // // 加载折线图，显示
    // myChart();

    // 根据页面url的参数isOnlyAlarm来获取列表数据，true：获取回路的所有报警数据，否则获取所有的采集数据
    var isOnlyAlarm = params['isOnlyAlarm'];
    var dataUrl = '';
    if (isOnlyAlarm == 'true'){
        // 如果是查看报警的回路则加载折线图，显示折线图
        myChart();
        dataUrl = '/circuit/alarms';
    }else {
        dataUrl = '/collectData/index'
    }
    // 数据表格方法级渲染
    var tbObj = table.render({
        elem: '#dataBody' // 绑定元素
        , id: 'collectDataList' // 唯一ID
        , height: 'full-20' //高度最大化减去差值
        , url:dataUrl  // 接口地址 默认会自动传递两个参数：?page=1&limit=30
        , where:params // 回路的编码 {'code':回路编码}
        , method: 'post' // 接口请求方法
        , page: true
        , skin: 'row' //行边框风格
        , even: true //开启隔行背景
        , limits: [10, 30, 60, 90, 150]
        , limit: 10 //默认采用30
        , cols: [[ //标题栏
            // {checkbox: true, fixed: 'left', rowspan: 2}
            // , {field: 'name', title: '名称',fixed: 'left', width: 120, rowspan: 2}
            // , {field: 'device_name', title: '变压器编号', width: 120, rowspan: 2}
            // , {field: 'device_address', title: '地址', width: 200, rowspan: 2}
            // , {field: 'collector_mac_code', title: '采集器编号', width: 120, rowspan: 2}
            {field: 'voltage', width: 100, title: '电压(V)'}
            ,{field: 'electric', width: 100, title: '电流(A)'}
            ,{field: 'temperature', title: '温度(℃)', width: 100, rowspan: 2}
            // ,{field: 'process_state', width: 100, title: '处理状态'}
            // ,{field: 'state', width: 100, title: '采集状态'}
            // , {field: 'updated_at', title: '修改时间', width: 180, sort: true, rowspan: 2}
            , {field: 'created_at', title: '采集时间', width: 180, sort: true, rowspan: 2}
            // ,{fixed: 'right', title: '操作', width: 150, align: 'center', toolbar: '#groupBtn', rowspan: 2}
        ]]
        , done: function (res, curr, count) {

        }
    });


    // 事件处理
    var eventHandle = {
        // 模板导入
        importCollectData: function (obj) {
            var importUrl = '/collectData/import?view=' + obj;
            layer.open({
                type: 2
                , id: 'collectData' + obj // 只允许弹出一个
                , title: '导入采集数据'
                , area: ['700px', '500px']
                , shade: 0
                , maxmin: true
                , content: importUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    // 获取当前索引iframe页<form>元素对象
                    var form = layer.getChildFrame('[name="excelForm"]', index);
                    // 获取当前form下隐藏submit按钮对象
                    var btnHidden = form.find('#toolbarSubmit')[0];
                    // 向服务端post新增数据
                    btnHidden.click();
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    $title = '导入采集数据';
                    $msg = '您确定取消本次数据导入操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    $title = '新增采集数据';
                    $msg = '您确定取消本次数据导入操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , end: function () {
                    // 表格刷新
                    tbObj.reload();
                }
            });
        },
        // 模板导出
        exportCollectData: function (obj) {
            $title = '采集数据数据导出';
            $msg = '您确定执行本次数据导出操作吗？';
            $url = '/export/collectData';
            yjsloading.exportConfirm($title, $msg, $url);
        },
        // 关键字搜索重载
        searchData: function (obj) {
            // 获取关键字
            var words = $('#searchReload').val();

            // 表格搜索、重载
            tbObj.reload({
                where: {keywords: words}
            });
        },
        // 新增（单条）
        addData: function (obj) {
            var addUrl = '/collectData/item?view=' + obj;
            layer.open({
                type: 2
                , id: 'collectData' + obj // 只允许弹出一个
                , title: '新增采集数据'
                , area: ['700px', '500px']
                , shade: 0
                , maxmin: true
                , content: addUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    // 获取当前索引iframe页<form>元素对象
                    var form = layer.getChildFrame('[name="collectDataForm"]', index);
                    // 获取当前form下隐藏submit按钮对象
                    var btnHidden = form.find('#toolbarSubmit')[0];
                    // 向服务端post新增数据
                    btnHidden.click();
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    $title = '新增采集数据';
                    $msg = '您确定取消本次数据新增操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    $title = '新增采集数据';
                    $msg = '您确定取消本次数据新增操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , end: function () {
                    // 表格刷新
                    tbObj.reload();
                }
            });
        },
        // 编辑（单条）
        editData: function (obj) {
            var editUrl = '/circuit/item?view=' + obj.event + '&code=' + obj.data.code;
            layer.open({
                type: 2
                , id: obj.event + obj.data.code // 只允许弹出一个
                , title: '编辑回路的采集数据'
                , area: ['700px', '500px']
                , shade: 0
                , maxmin: true
                , content: editUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    // 获取当前索引iframe页<form>元素对象
                    var form = layer.getChildFrame('[name="collectDataForm"]', index);
                    // 获取当前form下隐藏submit按钮对象
                    var btnHidden = form.find('#toolbarSubmit')[0];
                    // 向服务端post新增数据
                    btnHidden.click();
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    $title = '编辑回路的采集数据';
                    $msg = '您确定取消本次数据编辑操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    $title = '编辑回路的采集数据';
                    $msg = '您确定取消本次数据编辑操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , end: function () {
                    // 表格刷新
                    tbObj.reload();
                }
            });
        },
        // 删除（批量）
        deleteBatchData: function (obj) {
            var checkStatus = table.checkStatus('collectDataList')
                , data = checkStatus.data;
            if (checkStatus.data.length === 0) {
                yjslayer.failMsg('请选择需删除的采集数据数据！');
            } else {
                var ids = [];
                for (var i = 0; i < data.length; i++) {
                    ids[i] = data[i].code;
                }

                var title = '采集数据信息维护';
                var msg = '您确定执行本次数据批量删除操作吗？';
                var deleteUrl = '/collectData/delete/batch';
                var postData = {code: ids};

                yjsloading.ajaxConfirm(title, msg, deleteUrl, postData, function (result) {
                });
            }
        },
        // 查看（单条）
        viewData: function (obj) {
            var viewUrl = '/collectData/item?view=' + obj.event + '&code=' + obj.data.code;
            layer.open({
                type: 2
                , id: obj.event + obj.data.code // 只允许弹出一个
                , title: '查看采集数据信息'
                , area: ['500px', '400px']
                , shade: 0
                , maxmin: true
                , content: viewUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    layer.close(index);
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    layer.close(index);
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    layer.close(index);
                }
            });
        },
        // 删除（单条）
        deleteData: function (obj) {
            var title = '采集数据信息维护';
            var msg = '您确定执行本次数据删除操作吗？';
            var deleteUrl = '/collectData/delete';
            var postData = {code: obj.data.code};
            console.log(postData);

            yjsloading.ajaxConfirm(title, msg, deleteUrl, postData, function (result) {
            });
        },
    };

    // 监听按钮点击事件 (非工具条)
    $('.layui-btn').on('click', function () {
        var type = $(this).data('type');
        eventHandle[type] ? eventHandle[type].call(this, type) : '';
    });

    // 监听工具条按钮点击事件
    table.on('tool(collectDataList)', function (obj) {
        // 获得当前行lay-event对应的值
        var itemEvent = obj.event;
        eventHandle[itemEvent] ? eventHandle[itemEvent].call(this, obj) : '';
    });

    // 可编辑单元格改变事件
    table.on('edit(collectDataList)', function (obj) {
        $url = '/collectData/update/cell';
        $data = {
            code: obj.data.code,
            attrs: [obj.field],
            values: [obj.value]
        };
        yjsloading.ajaxAutoSubmit($url, $data, function (result) {

        });
    });

});